This invention relates generally to computer memory, and more specifically to increasing the storage capacity of heterogeneous storage elements.
The term “heterogeneous storage elements” refers to individual memory elements having different physical characteristics, which affect the type and amount of information that the element can store. Thus, each element can store a different type and amount of information depending on its particular physical characteristics. An example of a memory system having heterogeneous storage elements is a phase change memory (PCM) system, where the range of resistance values that can be set is different for different PCM cells. In a PCM each cell supports a different range of resistance levels, which affects both the level range (amount of data) and the absolute level values (type of data) that the cell can support. The heterogeneity of the elements may, in general, cause errors in storing information into the memory and retrieving information from the memory. Specifically, while writing data into the memory, the writer may end up trying to store information in a cell, which the cell cannot support.
One approach to reducing errors in a heterogeneous storage element environment is to find a range of physical characteristics common to all memory elements and then to store information so that it can be retrieved within this common range of physical characteristics. As an example, in a PCM memory cell, a range of resistance values may exist which can be set across all PCM memory elements. Then, only this common range of resistance values is used to store information. Another approach is to treat non-writable cell values as errors and using an error correction code (ECC) to correct the data. A shortcoming to both of these approaches is that they may lead to a loss in storage capacity.
Another approach to reducing errors in a heterogeneous storage element environment is to assume that memory blocks or individual memory elements are either defective or non-defective, and then seeking to circumvent defective blocks or elements during data reading and/or writing. A drawback to these approaches is that they assume that blocks or individual elements can be in one of only two states and thus they are not designed for heterogeneity in general.